package com.itcp.itelpicture.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.itcp.itelpicture.domain.dto.community.CommunityPostAddRequest;
import com.itcp.itelpicture.domain.dto.community.CommunityPostEditRequest;
import com.itcp.itelpicture.domain.dto.community.CommunityPostQueryRequest;
import com.itcp.itelpicture.domain.po.community.CommunityPost;
import com.itcp.itelpicture.domain.po.User;
import com.itcp.itelpicture.domain.vo.communityVo.CommunityPostVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;

/**
 * 社区文章服务
 */
public interface ICommunityPostService extends IService<CommunityPost> {

    /**
     * 校验文章参数是否合法
     * 
     * @param communityPost 文章参数
     */
    void validCommunityPost(CommunityPost communityPost);

    /**
     * 获取文章封装
     * 
     * @param communityPost 文章对象
     * @param request       HTTP 请求
     * @return 文章视图
     */
    CommunityPostVO getCommunityPostVO(CommunityPost communityPost);

    /**
     * 分页获取文章列表
     * 
     * @param communityPostQueryRequest 查询条件
     * @param request                   HTTP 请求
     * @return 分页结果
     */
    Page<CommunityPostVO> listCommunityPostVOByPage(CommunityPostQueryRequest communityPostQueryRequest,
            HttpServletRequest request);

    /**
     * 添加文章
     * 
     * @param communityPostAddRequest 文章创建请求
     * @param loginUser               当前登录用户
     * @return 文章 ID
     */
    Long addCommunityPost(CommunityPostAddRequest communityPostAddRequest, User loginUser);

    /**
     * 更新文章
     * 
     * @param communityPostEditRequest 文章更新请求
     * @param loginUser                当前登录用户
     * @return 是否成功
     */
    boolean updateCommunityPost(CommunityPostEditRequest communityPostEditRequest, User loginUser);

    /**
     * 删除文章
     * 
     * @param id        文章 ID
     * @param loginUser 当前登录用户
     * @return 是否成功
     */
    boolean deleteCommunityPost(Long id, User loginUser);

    /**
     * 收藏文章
     * 
     * @param id        文章 ID
     * @param loginUser 当前登录用户
     * @return 是否成功
     */
    boolean favoriteCommunityPost(Long id, User loginUser);

    /**
     * 取消收藏文章
     * 
     * @param id        文章 ID
     * @param loginUser 当前登录用户
     * @return 是否成功
     */
    boolean unfavoriteCommunityPost(Long id, User loginUser);

    /**
     * 获取查询条件
     * 
     * @param communityPostQueryRequest 查询参数
     * @return 查询条件
     */
    QueryWrapper<CommunityPost> getQueryWrapper(CommunityPostQueryRequest communityPostQueryRequest);

    /**
     * 上传图片到对象存储
     * @param multipartFile
     * @param loginUser
     * @return
     */
    String uploadPicture(MultipartFile multipartFile, User loginUser);
}